#ifndef _WX_BMPBUTTON_H_BASE_
#define _WX_BMPBUTTON_H_BASE_

#include "wx/defs.h"

#if wxUSE_BMPBUTTON

#include "wx/bitmap.h"
#include "wx/button.h"

extern const wxChar wxButtonNameStr[];

// ----------------------------------------------------------------------------
// wxBitmapButton: a button which shows bitmaps instead of the usual string.
// It has different bitmaps for different states (focused/disabled/pressed)
// ----------------------------------------------------------------------------

class wxBitmapButtonBase : public wxButton {
  public:
    wxBitmapButtonBase() {
      m_marginX =
        m_marginY = 0;
    }

    // set the bitmaps
    void SetBitmapLabel( const wxBitmap& bitmap ) { m_bmpNormal = bitmap; OnSetBitmap(); }
    void SetBitmapSelected( const wxBitmap& sel ) { m_bmpSelected = sel; OnSetBitmap(); }
    void SetBitmapFocus( const wxBitmap& focus ) { m_bmpFocus = focus; OnSetBitmap(); }
    void SetBitmapDisabled( const wxBitmap& disabled ) { m_bmpDisabled = disabled; OnSetBitmap(); }
    void SetBitmapHover( const wxBitmap& hover ) { m_bmpHover = hover; OnSetBitmap(); }

    // retrieve the bitmaps
    const wxBitmap& GetBitmapLabel() const { return m_bmpNormal; }
    const wxBitmap& GetBitmapSelected() const { return m_bmpSelected; }
    const wxBitmap& GetBitmapFocus() const { return m_bmpFocus; }
    const wxBitmap& GetBitmapDisabled() const { return m_bmpDisabled; }
    const wxBitmap& GetBitmapHover() const { return m_bmpHover; }
    wxBitmap& GetBitmapLabel() { return m_bmpNormal; }
    wxBitmap& GetBitmapSelected() { return m_bmpSelected; }
    wxBitmap& GetBitmapFocus() { return m_bmpFocus; }
    wxBitmap& GetBitmapDisabled() { return m_bmpDisabled; }
    wxBitmap& GetBitmapHover() { return m_bmpHover; }

    // set/get the margins around the button
    virtual void SetMargins( int x, int y ) { m_marginX = x; m_marginY = y; }
    int GetMarginX() const { return m_marginX; }
    int GetMarginY() const { return m_marginY; }

    wxDEPRECATED( void SetLabel( const wxBitmap& bitmap ) );

    // prevent virtual function hiding
    virtual void SetLabel( const wxString& label ) { wxWindow::SetLabel( label ); }
  protected:
    // function called when any of the bitmaps changes
    virtual void OnSetBitmap() { InvalidateBestSize(); Refresh(); }

    // the bitmaps for various states
    wxBitmap m_bmpNormal,
             m_bmpSelected,
             m_bmpFocus,
             m_bmpDisabled,
             m_bmpHover;

    // the margins around the bitmap
    int m_marginX,
        m_marginY;


    DECLARE_NO_COPY_CLASS( wxBitmapButtonBase )
};

inline void wxBitmapButtonBase::SetLabel( const wxBitmap& bitmap ) {
  SetBitmapLabel( bitmap );
}

#include "wx/gtk/bmpbuttn.h"

#endif // wxUSE_BMPBUTTON

#endif // _WX_BMPBUTTON_H_BASE_
